<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>

//【示例1】下面代码利用逻辑与运算检测变量初始值。
var user; 								// 定义变量
( ! user && alert("没有赋值"));	// 返回提示信息“没有赋值”

var user; 								// 定义变量
if( ! user){ 							// 条件判断
   alert("变量没有赋值呀");
}
//【示例2】由于逻辑与运算符右侧的表达式将根据左侧的表达式的值来决定是否执行，在程序中常利用它来设计结构简洁的条件运算。
var n = 3;
(n == 1) && alert(1);
(n == 2) && alert(2);
(n == 3) && alert(3);
( ! n) && alert("null");

var n = 3; 								// 定义变量
switch (n){ 							// 指定判断的变量
   case 1 : 							// 条件1
      alert(1);
      break; 							// 结束结构
   case 2 : 							// 条件2
      alert(2);
      break; 							// 结束结构
   case 3 : 							// 条件3
      alert(3);
      break; 							// 结束结构
   default : 							// 默认条件
      alert("null");
}
//【示例3】利用逻辑与运算符替代条件结构，是一种便捷的设计技巧，但是在使用时应该慎重。
var user = 0; 							// 定义并初始化变量
( ! user && alert("变量没有赋值呀"));	// 返回提示信息"变量没有赋值呀"
//【示例4】下面介绍几种特殊运算数应用技巧。

alert(typeof({} && true)) 	// 返回第二个运算数true的类型，即返回boolean
alert(typeof({} && false)) // 返回第二个运算数false的类型，即返回boolean
alert(typeof(true && {}))	// 返回第二个运算数{}的类型，即返回object
alert(typeof(false && {}))	// 返回第一个运算数false的类型，即返回boolean

alert(typeof("null" && null)) 		// 返回null的类型，即返回object
alert(typeof(null && "null"))		// 返回null的类型，即返回object

alert(typeof("NaN" && NaN)) 		// 返回NaN的类型，即返回number
alert(typeof(NaN && "NaN"))		// 返回NaN的类型，即返回number

alert(typeof("Infinity" && Infinity)) 
	// 返回第二个运算数Infinity的类型，即返回number
alert(typeof(Infinity && "Infinity"))
	// 返回第二个运算数"Infinity"的类型，即返回string

alert(typeof("undefined" && undefined))
alert(typeof(undefined && "undefined"))


</script>
</head>
<body>




</body>
</html>
